package com.minimalist.common.entity.lindi.po;

import com.minimalist.common.config.mybatis.InsertFullColumnHandler;
import com.minimalist.common.config.mybatis.UpdateFullColumnHandler;
import com.minimalist.common.config.mybatis.bo.BaseEntity;
import com.mybatisflex.annotation.Table;

import java.io.Serial;
import java.io.Serializable;
import java.sql.Timestamp;
import java.util.Objects;

/**
 * 林地指标交易平台_补贴申请付款记录表 实体类。
 *
 * @author 11987
 * @since 2025-07-07
 */
@Table(value = "LINDI_SUBSIDY_APPLICATION_PAY_RECORD", onInsert = InsertFullColumnHandler.class, onUpdate = UpdateFullColumnHandler.class)
public class LindiSubsidyApplicationPayRecord extends BaseEntity implements Serializable{

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 补贴申请ID
     */
    private Long subsidyApplicationId;

    /**
     * 补贴申请付款记录ID
     */
    private Long subsidyApplicationPayRecordId;

    /**
     * 支付类型
     */
    private String payType;

    /**
     * 支付金额
     */
    private String payMoney;

    /**
     * 支付时间
     */
    private Timestamp payDate;

    /**
     * 支付方式
     */
    private String payMethod;

    /**
     * 附件ID
     */
    private Long fileId;

    /**
     * 备注
     */
    private String remark;

    /**
     * 补贴申请支付通知ID
     */
    private Long subsidyApplicationPayNoticeId;

    /**
     * 补贴申请镇街支付明细ID
     */
    private Long subsidyApplicationTownPaymentId;

    /**
     * 镇街名称
     */
    private String townName;

    // Constructors
    public LindiSubsidyApplicationPayRecord() {
    }

    public LindiSubsidyApplicationPayRecord(Long subsidyApplicationId, Long subsidyApplicationPayRecordId, String payType, String payMoney, Timestamp payDate, String payMethod, Long fileId, String remark, Long subsidyApplicationPayNoticeId, Long subsidyApplicationTownPaymentId, String townName) {
        this.subsidyApplicationId = subsidyApplicationId;
        this.subsidyApplicationPayRecordId = subsidyApplicationPayRecordId;
        this.payType = payType;
        this.payMoney = payMoney;
        this.payDate = payDate;
        this.payMethod = payMethod;
        this.fileId = fileId;
        this.remark = remark;
        this.subsidyApplicationPayNoticeId = subsidyApplicationPayNoticeId;
        this.subsidyApplicationTownPaymentId = subsidyApplicationTownPaymentId;
        this.townName = townName;
    }

    // Getters and Setters
    public Long getSubsidyApplicationId() {
        return subsidyApplicationId;
    }

    public void setSubsidyApplicationId(Long subsidyApplicationId) {
        this.subsidyApplicationId = subsidyApplicationId;
    }

    public Long getSubsidyApplicationPayRecordId() {
        return subsidyApplicationPayRecordId;
    }

    public void setSubsidyApplicationPayRecordId(Long subsidyApplicationPayRecordId) {
        this.subsidyApplicationPayRecordId = subsidyApplicationPayRecordId;
    }

    public String getPayType() {
        return payType;
    }

    public void setPayType(String payType) {
        this.payType = payType;
    }

    public String getPayMoney() {
        return payMoney;
    }

    public void setPayMoney(String payMoney) {
        this.payMoney = payMoney;
    }

    public Timestamp getPayDate() {
        return payDate;
    }

    public void setPayDate(Timestamp payDate) {
        this.payDate = payDate;
    }

    public String getPayMethod() {
        return payMethod;
    }

    public void setPayMethod(String payMethod) {
        this.payMethod = payMethod;
    }

    public Long getFileId() {
        return fileId;
    }

    public void setFileId(Long fileId) {
        this.fileId = fileId;
    }

    public String getRemark() {
        return remark;
    }

    public void setRemark(String remark) {
        this.remark = remark;
    }

    public Long getSubsidyApplicationPayNoticeId() {
        return subsidyApplicationPayNoticeId;
    }

    public void setSubsidyApplicationPayNoticeId(Long subsidyApplicationPayNoticeId) {
        this.subsidyApplicationPayNoticeId = subsidyApplicationPayNoticeId;
    }

    public Long getSubsidyApplicationTownPaymentId() {
        return subsidyApplicationTownPaymentId;
    }

    public void setSubsidyApplicationTownPaymentId(Long subsidyApplicationTownPaymentId) {
        this.subsidyApplicationTownPaymentId = subsidyApplicationTownPaymentId;
    }

    public String getTownName() {
        return townName;
    }

    public void setTownName(String townName) {
        this.townName = townName;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        if (!super.equals(o)) return false;
        LindiSubsidyApplicationPayRecord that = (LindiSubsidyApplicationPayRecord) o;
        return Objects.equals(subsidyApplicationId, that.subsidyApplicationId) &&
               Objects.equals(subsidyApplicationPayRecordId, that.subsidyApplicationPayRecordId) &&
               Objects.equals(payType, that.payType) &&
               Objects.equals(payMoney, that.payMoney) &&
               Objects.equals(payDate, that.payDate) &&
               Objects.equals(payMethod, that.payMethod) &&
               Objects.equals(fileId, that.fileId) &&
               Objects.equals(remark, that.remark) &&
               Objects.equals(subsidyApplicationPayNoticeId, that.subsidyApplicationPayNoticeId) &&
               Objects.equals(subsidyApplicationTownPaymentId, that.subsidyApplicationTownPaymentId) &&
               Objects.equals(townName, that.townName);
    }

    @Override
    public int hashCode() {
        return Objects.hash(super.hashCode(), subsidyApplicationId, subsidyApplicationPayRecordId, payType, payMoney, payDate, payMethod, fileId, remark, subsidyApplicationPayNoticeId, subsidyApplicationTownPaymentId, townName);
    }

    @Override
    public String toString() {
        return "LindiSubsidyApplicationPayRecord{" +
               "subsidyApplicationId=" + subsidyApplicationId +
               ", subsidyApplicationPayRecordId=" + subsidyApplicationPayRecordId +
               ", payType='" + payType + '\'' +
               ", payMoney='" + payMoney + '\'' +
               ", payDate=" + payDate +
               ", payMethod='" + payMethod + '\'' +
               ", fileId=" + fileId +
               ", remark='" + remark + '\'' +
               ", subsidyApplicationPayNoticeId=" + subsidyApplicationPayNoticeId +
               ", subsidyApplicationTownPaymentId=" + subsidyApplicationTownPaymentId +
               ", townName='" + townName + '\'' +
               '}';
    }
}
